草庐IT

C++11 auto 和 size_type

全部标签

c++ - 在 VS2012 上禁用 C++11 功能

是否可以在VS2012上禁用C++11功能?我的代码还没有准备好,我不想引入更多的困惑 最佳答案 从VisualC++2015Update3开始,现在可以为语言行为指定语言版本(显然它不仅仅影响一致性检查):https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/不幸的是,唯一的选项是“C++14”(不准确,它包括以前发布的后C++14功能)和“C++Latest”(C++14加上C++17的部分实现和

C++11 和多态 lambda 的缺失——为什么?

我一直在审阅C++11的草稿版本标准。特别是关于lambdas的部分,我对不引入多态lambda的原因感到困惑。例如,在可以使用多态lambda的100001种方式中,我曾希望我们可以使用如下代码:templatevoidfoo(Containerc){for_each(c.begin(),c.end(),[](T&t){++t;});}原因是什么:是委员会没时间了吗?多态lambda太难实现了?或者可能是PTB不需要它们?注意:请记住上面的例子不是唯一的例子,它只是作为代码类型的指南提供的。仅专注于为上述代码提供解决方法的答案将被视为无效!相关资源:Lambdaexpressions

11 - 初步了解Python

初步了解Python参考资料:菜鸟教程:Python3基础语法PEP8:StyleGuideforPythonCodePythonDocs:SourceCodeEncoding菜鸟教程:Python3命令行参数PythonDocs:ExecutablePythonScripts知乎:#!/usr/bin/envpython有什么用?编程规范:PEP8在没有额外编程规范的前提下,建议翻阅并遵守PEP8-StyleGuideforPythonCode编码默认情况下,Python3源码文件以UTF-8编码,所有字符串都是unicode字符串。可以在源码文件上方指定不同的编码:#-*-coding:c

c++ - C++11 基于范围的 for 循环条件是否在每个循环中都得到评估?

for(auto&entity:memoryManager.getItems())entity->update(mFrameTime);如果memoryManager包含1000个项目,是否memoryManager.getItems()在循环开始时被调用1000次还是只调用一次?编译器是否使用-O2(或-O3)运行任何优化?(memoryManager.getItems()返回一个std::vector&) 最佳答案 它只被评估一次。该标准将基于范围的for语句定义为等同于:{auto&&__range=range-init;fo

c++ - 从 Boost 迁移到 C++11 的标准库

我是boost库的新用户。出于多种原因,我发现自己更多地考虑采用boost。据我所知,boost库似乎是一种skunkworks沙箱,在被C++委员会采纳之前尝试了各种用于即将到来的标准化的C++TR功能——想想boost::filesystem和boost::regex,例如,我在visualstudio中通过#includeheader尝试了一些C++11正则表达式功能-在我移植到目标powerpc平台之前效果很好,该平台当时使用了CodeSourcery的GCC4.7.3.不幸的是,我意识到在运行时,许多正则表达式实现是不完整的或空的(甚至认为它已编译)——通过一些功课,我应该事

c++ - C++11 中的数据竞争、UB 和计数器

以下模式在许多软件中很常见,这些软件想要告诉用户它做了多少次各种事情:intnum_times_done_it;//globalvoiddoit(){++num_times_done_it;//dosomething}voidreport_stats(){printf("calleddoit%itimes\n",num_times_done_it);//andprobablysomeotherstufftoo}不幸的是,如果多个线程可以在没有某种同步的情况下调用doit,则对num_times_done_it的并发读取-修改-写入可能是数据竞争,因此整个程序的行为将是不确定的。此外,如

C++11 operator""with double parameter

考虑:structstr{};stroperator""_X(longdoubled){returnstr();}这在g++4.7.2Wallstd=c++11下编译得很好但现在如果我给双倍:stroperator""_X(doubled){returnstr();}我收到以下错误消息:main.cpp|3|错误:'stroperator""_X(double)'的参数列表无效问题是什么?这与“无法重新定义内置文字后缀的含义”(StroustrupFAQ)有关吗?您能想出解决方法吗? 最佳答案 Whatistheproblem?问题

c++11/14 make_unique std::string 的模糊重载

有人可以解释一下如何解决make_unique的模棱两可的过载警告,错误来自何处以及它的确切含义(我确实理解模棱两可的过载是什么,但我不确定为什么我会为这个特定的代码得到一个)?我使用的是c++11,因此我使用了HerbSutter推荐的模板。使用它我得到以下错误:Error4errorC2668:'make_unique':ambiguouscalltooverloadedfunction在visualstudio13中将鼠标悬停在工具提示上给我以下方法:functiontemplate"std::enable_if::value,std::unique_ptr>>::typestd

c++ - 在类中使用返回 auto 的静态 constexpr 成员函数

我正在尝试解决我遇到的MSVC2015中的错误(请参阅此问题:wrongtypedeductionoffunctionsignature).所以我想到了这个:#includenamespacewreg{usingt_oshandle=HKEY;structt_api{staticconstexprautofnc_open_key(){return::RegOpenKeyExA;}//thisdoesn'tcompile:staticconstexprautoopen_key=fnc_open_key();//thesedon'tcompileeither://staticconstex

c++ - 引用 "auto"函数作为模板参数

这是重现问题的最小(C++14)代码:templatestructFoo{staticautovalue(){}};voidbar(){}templatestructFoo::value>;GNUC++“g++(Ubuntu5.1.0-0ubuntu11~14.04.1)5.1.0”编译器发出:error:couldnotconverttemplateargument‘Foo::value’to‘void(&)()’templatestructFoo::value>;^我注意到的第一个奇怪的事情是Foo::value—a未被替换,并且value不知何故变成了模板?以下无意义的修复强化了